package com.yuqih.common.spring;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * 该类和AppSpringBeanUtil的区别为该类的成员及方法均为非静态的，所以如果多个项目公用该jar包时，不应该使用此类<br>
 * 
 * 在Spring启动时将容器本身注入，用以得到Spring本身的引用<br>
 * 下面为一些小tip: <br>
 * 当bean继承spring 的FactoryBean时， 使用applicationContext.getBean(beanName)
 * 得到的是bean的getObject方法的返回值，而不是bean本身。 此时需要的话请用
 * applicationContext.getBean('&'+beanName)将得到bean本身。<br>
 * 而且使用
 * applicationContext.getBean(beanName)的时候bean的getObject只会调用一次，此后都是直接返回原先的对象，
 * 使用applicationContext
 * .getBean('&'+beanName)后再调用bean.getObject方法就可以多次调用bean.getObject方法体，从而改变返回对象的值
 * 
 * 
 * @author yuqih
 * 
 */
public class StaticContextContainer implements ApplicationContextAware {
	private final Log log = LogFactory.getLog(getClass());

	private static ApplicationContext context;

	/**
	 * @return the context
	 */
	public static ApplicationContext getContext() {
		return context;
	}

	@Override
	public void setApplicationContext(ApplicationContext context)
			throws BeansException {
		StaticContextContainer.context = context;
		log.debug("ApplicationContext registed STATIC");
	}
	
}
